<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    /*
        js本身不是正统(Java, C++)的面向对象的语言
        js是面向原型的语言(js中面向对象 --- 面向原型)

        1. 构造函数
        作用: 创建对象的
        细节: 
        1) 构造函数首字母大写   
        2) 只有通过new关键字调用的函数, 这个函数才是构造函数

        2. 为什么new一下就能产生对象, new到底做了什么?(面试题)
        - 创建一个新的对象
        - 让函数内部的this指向这个新的对象
        - 执行这个构造函数(把内部的属性添加到对象中)
        - 返回新对象
        */

    // 1. 构造函数
    function Person(name, age, sex) {
      this.name = name
      this.age = age
      this.sex = sex
    }

    // 2. 构造函数的原型对象
    Person.prototype.eat = () => {
      console.log('吃东西')
    }
    console.log(Person.prototype)
    console.log(Person.prototype.constructor)

    const p1 = new Person('张三', 18, '男')
    console.log(p1)

    const p2 = new Person('李四', 20, '女')
    console.log(p2)

    p1.__proto__.eat()

    console.log(p1.__proto__.eat === p2.__proto__.eat)
  </script>
</body>

</html>